/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef DEVICES_LED_H
#define DEVICES_LED_H


/* Includes ------------------------------------------------------------------*/
#include "gpio.h"

/* Exported constants --------------------------------------------------------*/
/* Exported macros -----------------------------------------------------------*/
/* ========== Lidar Board LEDs ========== */
/* DATA_LED */
#define LID_DATA_LED_SetOFF() HAL_GPIO_WritePin(LID_DATA_LED_GPIO_Port,LID_DATA_LED_Pin,GPIO_PIN_RESET)
#define LID_DATA_LED_SetON() HAL_GPIO_WritePin(LID_DATA_LED_GPIO_Port,LID_DATA_LED_Pin,GPIO_PIN_SET)
#define LID_DATA_LED_SetToggle() HAL_GPIO_TogglePin(LID_DATA_LED_GPIO_Port,LID_DATA_LED_Pin)

/* BEEP */
#define LID_BEEP_SetON() HAL_GPIO_WritePin(LID_BEEP_GPIO_Port,LID_BEEP_Pin,GPIO_PIN_SET)
#define LID_BEEP_SetOFF() HAL_GPIO_WritePin(LID_BEEP_GPIO_Port,LID_BEEP_Pin,GPIO_PIN_RESET)
#define LID_BEEP_SetToggle() HAL_GPIO_TogglePin(LID_BEEP_GPIO_Port,LID_BEEP_Pin)

/* BAT LED */
#define LID_BAT1_LED_SetOFF() HAL_GPIO_WritePin(LID_BAT1_LED_GPIO_Port,LID_BAT1_LED_Pin,GPIO_PIN_RESET)
#define LID_BAT1_LED_SetON() HAL_GPIO_WritePin(LID_BAT1_LED_GPIO_Port,LID_BAT1_LED_Pin,GPIO_PIN_SET)
#define LID_BAT1_LED_SetToggle() HAL_GPIO_TogglePin(LID_BAT1_LED_GPIO_Port,LID_BAT1_LED_Pin)

#define LID_BAT2_LED_SetOFF() HAL_GPIO_WritePin(LID_BAT2_LED_GPIO_Port,LID_BAT2_LED_Pin,GPIO_PIN_RESET)
#define LID_BAT2_LED_SetON() HAL_GPIO_WritePin(LID_BAT2_LED_GPIO_Port,LID_BAT2_LED_Pin,GPIO_PIN_SET)
#define LID_BAT2_LED_SetToggle() HAL_GPIO_TogglePin(LID_BAT2_LED_GPIO_Port,LID_BAT2_LED_Pin)

#define LID_BAT3_LED_SetOFF() HAL_GPIO_WritePin(LID_BAT3_LED_GPIO_Port,LID_BAT3_LED_Pin,GPIO_PIN_RESET)
#define LID_BAT3_LED_SetON() HAL_GPIO_WritePin(LID_BAT3_LED_GPIO_Port,LID_BAT3_LED_Pin,GPIO_PIN_SET)
#define LID_BAT3_LED_SetToggle() HAL_GPIO_TogglePin(LID_BAT3_LED_GPIO_Port,LID_BAT3_LED_Pin)

#define LID_BAT4_LED_SetOFF() HAL_GPIO_WritePin(LID_BAT4_LED_GPIO_Port,LID_BAT4_LED_Pin,GPIO_PIN_RESET)
#define LID_BAT4_LED_SetON() HAL_GPIO_WritePin(LID_BAT4_LED_GPIO_Port,LID_BAT4_LED_Pin,GPIO_PIN_SET)
#define LID_BAT4_LED_SetToggle() HAL_GPIO_TogglePin(LID_BAT4_LED_GPIO_Port,LID_BAT4_LED_Pin)


/* ========== Receive Board LEDs ========== */
/* DATA_LED */
#define REC_DATA_LED_SetON() HAL_GPIO_WritePin(REC_DATA_LED_GPIO_Port,REC_DATA_LED_Pin,GPIO_PIN_RESET)
#define REC_DATA_LED_SetOFF() HAL_GPIO_WritePin(REC_DATA_LED_GPIO_Port,REC_DATA_LED_Pin,GPIO_PIN_SET)
#define REC_DATA_LED_SetToggle() HAL_GPIO_TogglePin(REC_DATA_LED_GPIO_Port,REC_DATA_LED_Pin)

/* BAT LED */
#define REC_BAT1_LED_SetON() HAL_GPIO_WritePin(REC_BAT1_LED_GPIO_Port,REC_BAT1_LED_Pin,GPIO_PIN_RESET)
#define REC_BAT1_LED_SetOFF() HAL_GPIO_WritePin(REC_BAT1_LED_GPIO_Port,REC_BAT1_LED_Pin,GPIO_PIN_SET)
#define REC_BAT1_LED_SetToggle() HAL_GPIO_TogglePin(REC_BAT1_LED_GPIO_Port,REC_BAT1_LED_Pin)

#define REC_BAT2_LED_SetON() HAL_GPIO_WritePin(REC_BAT2_LED_GPIO_Port,REC_BAT2_LED_Pin,GPIO_PIN_RESET)
#define REC_BAT2_LED_SetOFF() HAL_GPIO_WritePin(REC_BAT2_LED_GPIO_Port,REC_BAT2_LED_Pin,GPIO_PIN_SET)
#define REC_BAT2_LED_SetToggle() HAL_GPIO_TogglePin(REC_BAT2_LED_GPIO_Port,REC_BAT2_LED_Pin)

#define REC_BAT3_LED_SetON() HAL_GPIO_WritePin(REC_BAT3_LED_GPIO_Port,REC_BAT3_LED_Pin,GPIO_PIN_RESET)
#define REC_BAT3_LED_SetOFF() HAL_GPIO_WritePin(REC_BAT3_LED_GPIO_Port,REC_BAT3_LED_Pin,GPIO_PIN_SET)
#define REC_BAT3_LED_SetToggle() HAL_GPIO_TogglePin(REC_BAT3_LED_GPIO_Port,REC_BAT3_LED_Pin)



/* GroundInit */
#define LED_FucGroundInit \
{ \
	&LED_LID_InitBeginning, \
	&LED_LID_InitProcessing, \
	&LED_LID_InitFinishing, \
	&LED_LID_Erroring, \
	&BEEP_LID_BAT_Erroring, \
	&LED_LID_BattaryRemain, \
	&LED_REC_InitBeginning, \
	&LED_REC_InitProcessing, \
	&LED_REC_InitFinishing, \
	&LED_REC_BattaryRemain, \
} \

/* Exported types ------------------------------------------------------------*/
typedef struct
{
	void(*LED_LID_InitBeginning)(void);
	void(*LED_LID_InitProcessing)(void);
	void(*LED_LID_InitFinishing)(void);
	void(*LED_LID_Erroring)(void);
	void(*BEEP_LID_BAT_Erroring)(void);
	void(*LED_LID_BattaryRemain)(int Modeset);
	void(*LED_REC_InitBeginning)(void);
	void(*LED_REC_InitProcessing)(void);
	void(*LED_REC_InitFinishing)(void);
	void(*LED_REC_BattaryRemain)(int Modeset2);
}LED_Fuc;


/* Exported variables --------------------------------------------------------*/
extern LED_Fuc LED_Function;


/* End -----------------------------------------------------------------------*/
#endif
